<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 4.2.0">
<meta name="google-site-verification" content="SByO7HWUKwufO-witstBrFt-yyK6q3tUlCyYwkvYPiQ" />
<meta name="baidu-site-verification" content="orhaMjPwcS" />
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">

<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic|Roboto Slab:300,300italic,400,400italic,700,700italic|Roboto Mono:300,300italic,400,400italic,700,700italic&display=swap&subset=latin,latin-ext">
<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">
  <link rel="stylesheet" href="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"lixiyan4633.gitee.io","root":"/","scheme":"Pisces","version":"7.7.2","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":true,"show_result":true,"style":"mac"},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":true,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},"path":"search.xml"};
  </script>

  <meta name="description" content="flink1.10.0结合hive的catalog，打通试试数仓的第一步">
<meta property="og:type" content="article">
<meta property="og:title" content="实时数仓-flink-client的安装">
<meta property="og:url" content="https://lixiyan4633.gitee.io/2020/07/21/%E5%AE%9E%E6%97%B6%E6%95%B0%E4%BB%93-flink-client%E7%9A%84%E5%AE%89%E8%A3%85/index.html">
<meta property="og:site_name" content="喜延的个人博客">
<meta property="og:description" content="flink1.10.0结合hive的catalog，打通试试数仓的第一步">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggymga08rlj30hh0bd77i.jpg">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggyn9jhx2mj31mw0u00yc.jpg">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynabf2djj30gt0katag.jpg">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynespyubj305401rq2t.jpg">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynl3i245j3090047gll.jpg">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynnrtwspj305a01lwec.jpg">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynokad2tj304r018glf.jpg">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynrmrvg9j3060054t8l.jpg">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynsiu5huj31l40u0wjh.jpg">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynxfaxfdj305s026dfq.jpg">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynzas2x8j302f01zq2q.jpg">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynzoz5t2j30gz04174b.jpg">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggyo0m0vbqj31kb0u0jwb.jpg">
<meta property="article:published_time" content="2020-07-21T06:49:10.000Z">
<meta property="article:modified_time" content="2020-07-21T08:23:57.429Z">
<meta property="article:author" content="李喜延">
<meta property="article:tag" content="flink">
<meta property="article:tag" content="数仓">
<meta property="article:tag" content="kafka">
<meta property="article:tag" content="hivecatalog">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://tva1.sinaimg.cn/large/007S8ZIlly1ggymga08rlj30hh0bd77i.jpg">

<link rel="canonical" href="https://lixiyan4633.gitee.io/2020/07/21/%E5%AE%9E%E6%97%B6%E6%95%B0%E4%BB%93-flink-client%E7%9A%84%E5%AE%89%E8%A3%85/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true
  };
</script>

  <title>实时数仓-flink-client的安装 | 喜延的个人博客</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <div>
      <a href="/" class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">喜延的个人博客</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
        <p class="site-subtitle">我的大数据的之路</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
    </div>
  </div>
</div>


<nav class="site-nav">
  
  <ul id="menu" class="menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>首页</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-fw fa-tags"></i>标签</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="fa fa-fw fa-th"></i>分类</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>归档</a>

  </li>
        <li class="menu-item menu-item-about">

    <a href="/about/" rel="section"><i class="fa fa-fw fa-user"></i>关于</a>

  </li>
  </ul>

</nav>
</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content">
            

  <div class="posts-expand">
      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block " lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="https://lixiyan4633.gitee.io/2020/07/21/%E5%AE%9E%E6%97%B6%E6%95%B0%E4%BB%93-flink-client%E7%9A%84%E5%AE%89%E8%A3%85/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="https://tva1.sinaimg.cn/large/00831rSTly1gcyel996b4j30oa0oc1kx.jpg">
      <meta itemprop="name" content="李喜延">
      <meta itemprop="description" content="愿世界和平">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="喜延的个人博客">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          实时数仓-flink-client的安装
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2020-07-21 14:49:10 / 修改时间：16:23:57" itemprop="dateCreated datePublished" datetime="2020-07-21T14:49:10+08:00">2020-07-21</time>
            </span>
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/flink/" itemprop="url" rel="index"><span itemprop="name">flink</span></a>
                </span>
            </span>

          
            <div class="post-description">flink1.10.0结合hive的catalog，打通试试数仓的第一步<br> <img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggyljz3y8nj30z20h04ch.jpg"></div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <h1 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h1><p>目前实时数仓的概念愈发火热，无论是大厂BAT,TMD，都在推出自己公司的实时数仓，但是实时数仓具体怎么做，还是需要我们来慢慢探索的，正好借着我司即将开发实时数仓的契机，自己也着手搭建基于Flink的实时数仓。</p>
<h1 id="搭建"><a href="#搭建" class="headerlink" title="搭建"></a>搭建</h1><p>如果说数仓，肯定离不开的就是数据表，离线大家都知道是落在hive上，各种ODS层和DWD层已经DM,DIM等各个层级，实时数仓既然叫数仓肯定也是要遵循数仓的基本定义，这次利用flink-sql-client更接近数仓的表达方式，使得实时表可以落地，有很大的借鉴意义。</p>
<h2 id="1-安装基础组件"><a href="#1-安装基础组件" class="headerlink" title="1.安装基础组件"></a>1.安装基础组件</h2><p>本次安装需要的组件</p>
<ul>
<li>Hadoop 2.7.3</li>
<li>Hive 2.3.6</li>
<li>Flink 1.10.0</li>
<li>Zookeeper 3.4.14</li>
<li>Kafka 2.2.1</li>
</ul>
<p>上述的安装就不赘述了，相信玩大数据的，安几个基础组件还是OK的，值得提醒的一点是hive</p>
<p><strong>hive的配置</strong></p>
<p>a.hive-site.xml配置文件,增加一个metastore服务</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"> <span class="tag">&lt;<span class="name">property</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">name</span>&gt;</span>hive.metastore.uris<span class="tag">&lt;/<span class="name">name</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">value</span>&gt;</span>thrift://localhost:9083<span class="tag">&lt;/<span class="name">value</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">description</span>&gt;</span>IP address (or fully-qualified domain name) and port of the metastore host<span class="tag">&lt;/<span class="name">description</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">property</span>&gt;</span></span><br></pre></td></tr></table></figure>

<p>b.启动metastore</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./hive --service metastore &amp;</span><br></pre></td></tr></table></figure>



<h2 id="2-Flink安装"><a href="#2-Flink安装" class="headerlink" title="2.Flink安装"></a>2.Flink安装</h2><h3 id="a-迅雷下载"><a href="#a-迅雷下载" class="headerlink" title="a:迅雷下载"></a>a:迅雷下载</h3><h3 id="b-导入依赖"><a href="#b-导入依赖" class="headerlink" title="b.导入依赖"></a>b.导入依赖</h3><p>导入配置包到 $FLINK_HOME/lib，这个是最坑的，网上很文章都是写了包，然后运行成功了，表示怀疑</p>
<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggymga08rlj30hh0bd77i.jpg" alt="涉及的包"></p>
<p>主要分为三部分：</p>
<p><strong>hive的包</strong>：</p>
<p>这部分都是在hive的lib目录下，主要用于和hive打通，都下了吧，防止出问题</p>
<ul>
<li>antlr-runtime-3.5.2.jar</li>
<li>datanucleus-api-jdo-4.2.4.jar</li>
<li>datanucleus-core-4.1.17.jar</li>
<li>datanucleus-rdbms-4.1.19.jar</li>
<li>hive-exec-2.3.6.jar</li>
<li>hive-metastore-2.3.6.jar</li>
<li>hive-shims-common-2.3.6.jar</li>
<li>jackson-core-2.6.5.jar</li>
<li>javax.jdo-3.2.0-m3.jar</li>
<li>libfb303-0.9.3.jar</li>
</ul>
<p><strong>flink关联的包</strong>：</p>
<p>这部分就要去网上下载了</p>
<ul>
<li>flink-connector-hive_2.11-1.10.0.jar</li>
<li>flink-hadoop-compatibility_2.11-1.10.0.jar</li>
<li>flink-shaded-hadoop2-uber-blink-3.2.4.jar</li>
</ul>
<p><strong>flink的connect链接包</strong>：</p>
<p>网上大多都没说，主要用来连接kafka,序列化文本</p>
<ul>
<li>flink-csv-1.10.0.jar</li>
<li>flink-json-1.10.0.jar</li>
<li>flink-sql-connector-kafka_2.11-1.10.0.jar</li>
<li>mysql-connector-java-5.1.9.jar</li>
</ul>
<p><strong>剩下的就是flink下载完自带的</strong></p>
<ul>
<li>flink-dist_2.11-1.10.0.jar</li>
<li>flink-table_2.11-1.10.0.jar</li>
<li>flink-table-blink_2.11-1.10.0.jar</li>
<li>slf4j-log4j12-1.7.15.jar</li>
<li>log4j-1.2.17.jar</li>
</ul>
<h3 id="c-配置文件"><a href="#c-配置文件" class="headerlink" title="c.配置文件"></a>c.配置文件</h3><p>配置sql-client配置文件</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">catalogs:  # empty list</span><br><span class="line"><span class="meta">#</span><span class="bash"> A typical catalog definition looks like:</span></span><br><span class="line">  - name: myhive</span><br><span class="line">    type: hive</span><br><span class="line">    hive-conf-dir: /opt/app/hive/conf</span><br><span class="line">    hive-version: 2.3.6</span><br></pre></td></tr></table></figure>

<h3 id="d-启动"><a href="#d-启动" class="headerlink" title="d.启动"></a>d.启动</h3><p>1.1 启动standalone模式的flink</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">start-cluster.sh</span><br></pre></td></tr></table></figure>

<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggyn9jhx2mj31mw0u00yc.jpg" alt="Flink启动成功"></p>
<p>1.2 启动sql-client</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sql-client.sh embedded</span><br></pre></td></tr></table></figure>

<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynabf2djj30gt0katag.jpg" alt="sql-client启动成功"></p>
<h3 id="e-测试"><a href="#e-测试" class="headerlink" title="e.测试"></a>e.测试</h3><p>[1] 先看我们自定的catalog是否成功</p>
<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynespyubj305401rq2t.jpg" alt="查看catalog"></p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Flink SQL&gt; show catalogs;</span><br><span class="line">default_catalog</span><br><span class="line">myhive</span><br></pre></td></tr></table></figure>

<p>[2] hive建立个新的数据库myhive,建立个测试表a,并导入数据;</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">create database myhive;</span><br><span class="line">create a (id int);</span><br><span class="line">select * from a;</span><br></pre></td></tr></table></figure>

<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynl3i245j3090047gll.jpg" alt="hive查询"></p>
<p>[3] 在flinkSQL查询</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash"> 用新建myhive catalog</span></span><br><span class="line">use catalog myhive;</span><br><span class="line"><span class="meta">#</span><span class="bash"> 查看下面的数据库</span></span><br><span class="line">show databases;</span><br><span class="line"><span class="meta">#</span><span class="bash"> 使用myhive数据库</span></span><br><span class="line">use myhive;</span><br><span class="line"><span class="meta">#</span><span class="bash"> 查看对应的表</span></span><br><span class="line">show tables;</span><br></pre></td></tr></table></figure>

<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynnrtwspj305a01lwec.jpg" alt="查看数据"></p>
<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynokad2tj304r018glf.jpg" alt=""></p>
<p>可以看到，已经同步hive的元信息了</p>
<p>[4] 用Flink查询Hive表</p>
<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynrmrvg9j3060054t8l.jpg" alt="flink查询"></p>
<p>可以看到flink web页面提交了个任务</p>
<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynsiu5huj31l40u0wjh.jpg" alt="flink web页面"></p>
<p>[5]创建kafka的表</p>
<p>先启动zookeeper,在启动kafka,建立测试topic</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash"> 建立topic</span></span><br><span class="line">kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic flinktest</span><br><span class="line"><span class="meta">#</span><span class="bash"> 生产端</span></span><br><span class="line">kafka-console-producer.sh --broker-list localhost:9092 --topic flinktest</span><br></pre></td></tr></table></figure>

<p>[6]建立kafka流表</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">CREATE TABLE mykafka </span><br><span class="line">(name String, age Int)</span><br><span class="line"> WITH (</span><br><span class="line">     'connector.type'='kafka',</span><br><span class="line">     'connector.version'='universal',</span><br><span class="line">     'connector.topic'='flinktest',</span><br><span class="line">     'connector.properties.zookeeper.connect'='localhost:2181',</span><br><span class="line">     'connector.properties.bootstrap.servers'='localhost:9092',</span><br><span class="line">     'format.type'='csv',</span><br><span class="line">     'update-mode'='append');</span><br></pre></td></tr></table></figure>

<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynxfaxfdj305s026dfq.jpg" alt="kafka表"></p>
<p>[7] 查询测试</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">select * from mykafka</span><br></pre></td></tr></table></figure>

<p>kafka输入</p>
<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynzas2x8j302f01zq2q.jpg" alt="kafka生产端输入"></p>
<p>flink sql输出</p>
<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggynzoz5t2j30gz04174b.jpg" alt="flink消费"></p>
<p>查看flink web页面有个实时运行的任务</p>
<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlly1ggyo0m0vbqj31kb0u0jwb.jpg" alt="Flink web"></p>
<p>至此成功！</p>
<p>个人感觉主要难点是 包依赖的导入，比如用了flink 1.10.1就不行，需要重新换一套jar，不能兼容1.10.0的，有了开始就可以尽情施展了。加油</p>

    </div>

    
    
    

      <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/flink/" rel="tag"><i class="fa fa-tag"></i> flink</a>
              <a href="/tags/%E6%95%B0%E4%BB%93/" rel="tag"><i class="fa fa-tag"></i> 数仓</a>
              <a href="/tags/kafka/" rel="tag"><i class="fa fa-tag"></i> kafka</a>
              <a href="/tags/hivecatalog/" rel="tag"><i class="fa fa-tag"></i> hivecatalog</a>
          </div>

        


        
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/2020/04/02/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%AE%97%E6%B3%95Day19-%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8C%B9%E9%85%8D/" rel="prev" title="数据结构算法Day19-字符串匹配">
      <i class="fa fa-chevron-left"></i> 数据结构算法Day19-字符串匹配
    </a></div>
      <div class="post-nav-item">
    <a href="/2020/11/06/%E3%80%90Flink%E5%AE%9E%E6%88%98%E3%80%91%E5%9F%BA%E4%BA%8EWaterMark%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BB%B6%E8%BF%9F%E5%A4%84%E7%90%86/" rel="next" title="【Flink实战】基于WaterMark的数据延迟处理">
      【Flink实战】基于WaterMark的数据延迟处理 <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  
<div>
    
    <div>
    
        <div style="text-align:center;color: #ccc;font-size:14px;">-------------　　　　本文结束　<i class="fa fa-heart"></i>　感谢您的阅读　　　　-------------</div>
    
</div>


    
 </div>

  </div>


          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#概述"><span class="nav-number">1.</span> <span class="nav-text">概述</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#搭建"><span class="nav-number">2.</span> <span class="nav-text">搭建</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#1-安装基础组件"><span class="nav-number">2.1.</span> <span class="nav-text">1.安装基础组件</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#2-Flink安装"><span class="nav-number">2.2.</span> <span class="nav-text">2.Flink安装</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#a-迅雷下载"><span class="nav-number">2.2.1.</span> <span class="nav-text">a:迅雷下载</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#b-导入依赖"><span class="nav-number">2.2.2.</span> <span class="nav-text">b.导入依赖</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#c-配置文件"><span class="nav-number">2.2.3.</span> <span class="nav-text">c.配置文件</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#d-启动"><span class="nav-number">2.2.4.</span> <span class="nav-text">d.启动</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#e-测试"><span class="nav-number">2.2.5.</span> <span class="nav-text">e.测试</span></a></li></ol></li></ol></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt="李喜延"
      src="https://tva1.sinaimg.cn/large/00831rSTly1gcyel996b4j30oa0oc1kx.jpg">
  <p class="site-author-name" itemprop="name">李喜延</p>
  <div class="site-description" itemprop="description">愿世界和平</div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">25</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
            <a href="/categories/">
          
        <span class="site-state-item-count">4</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">25</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2020</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">李喜延</span>
</div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
  <script src="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/pisces.js"></script>


<script src="/js/next-boot.js"></script>




  















  

  

</body>
</html>
